If this is a first time you visiting Scrolls, please register in Fight Club. If you already registered, please authorize on Fight Club start page with your login and password.
Alex Nomad Начинающим клановым программистам. Часть II.
Combats API
Продолжим наше повествование о программировании в БК. Напомним, что в предыдущей части я рассказывал о следующем: 1. Общие принципы создания сервисов для БК 2. Открытые и закрытые страницы БК 3. Пример чтения информации из БК (php, чтение инфы)
Теперь Вы чувствуете в себе силы сделать что-то более значимое и грандиозное? Как я Вам не завидую! Но слава создателям БК - они предусмотрели Combats API, а значит, некоторые сервисы можно сделать намного быстрее и проще. Введение Combats API первоначально преследовало следующие цели: 1. Снизить нагрузку на сервера БК 2. Обеспечить дополнительный источник поступления средств.
Первая ссылка – это уже известная страница с короткой информацией о персонаже. Вторая и третья ссылка предоставляют Вам доступ к информации о наличии товаров в магазине и комиссионке. Формат их достаточно простой, сначала идет название раздела, потом идет перечисление товаров в виде gif;name;price;count. Разобрать весь текст при помощи preg_match_all довольно легко. "Оружие: кастеты,ножи" knife61;Темный Кинжал;9.00 - 231.00;2 knife200;Battle Knife;16.00 - 200.00;4 knife63;Нож Довольных;7.00 - 5000.00;8 knife56;Кинжал Витой Рукояти;3.00 - 43.00;45
При программировании ресурсов, использующих ссылки доступа к магазину и комиссионке вы столкнетесь со следующими проблемами: 1. При использовании функции file_get_contents() вы наверняка получите ответ «Bad referers» или «Произошла ошибка». Это связано с тем, что эта функция не отправляет в запросе информацию о Referer. Я эту проблему решил запрограммировав доступ на уровне сокетов (см.ниже). 2. Как Вы уже догадались, меняя в запросе capitalcity на любой другой город можно получить информацию со всех городов. Но Emeralds City на этот запрос не ответит. Поэтому чтобы получить информацию из магазина Emeralds City придется зарегистрировать бота, раскачать его до 4 уровня, снабдить визой и отправить в магазин. Именно поэтому во всех картах торговца (за исключением нашей конечно) нет информации о наличии товаров в магазине Emeralds City.
Теперь приведу простой пример как организовать доступ к БК на уровне сокетов. Только не забудьте, что за очень частые запросы Вас также могут забанить. Поскольку ситуация в магазинах и комиссионках меняется медленно, то достаточно одного запроса в 15-20 минут.
Существует еще одна ссылка из Combats API, которая мне не известна. Обратите внимание, что страница о ставках и ходе текущего турнира в Башне Смерти является закрытой ссылкой. При этом клан Mercenaries показывает информацию о турнирах, не имея там бота. Информация достаточно сухая и явно недостаточная, чтобы конкурировать на рынке сервисов для БК. Но факт остается фактом.
В завершение этой части хотелось бы сразу пресечь все рассуждения и негодования о том, что я раскрываю секретную информацию. Когда я начинал программировать для БК мне никто не помогал, никто не делился со мной информацией, все приходилось делать методом проб и ошибок. А ссылки, приведенные в этой статье, можно найти на просторах Интернет. Да и количество карт торговца подсказывает мне, что эта информация неизвестна только ленивому.
Я сам не знал, пока не обнаружил что карты торговца у всех кланов работают без ботов. Тогда и начал искать целеноправлено. Гугл однозначно рулит, если кто-то где-то хоть раз упомянул...
Гость БК
02-09-07 @ 00:20
А актуальные параметры БК-шных вещей откуда можно взять? Будут ли возражать дарки если я использую БД вещей из их переодевалки в своих небольших публичных разработках?
Посмотрел я на способы добычи данных, file_get_contents(), fsockopen() - конечно хорошо, но ведь есть способы проще и удобнее (имхо). Привду пример своей функции на основе библиотеки curl:
-------- // в качестве аргументов адрес // и необязательные дополнительные заголовки
function get_url($url, $headers=null){ // инициализация библиотеки ....$ch = curl_init(); //заполнение параметров ....curl_setopt($ch, CURLOPT_URL, $url); //адрес ....curl_setopt($ch, CURLOPT_HEADER, 0); //не включать в результат заголовки ответа ....//curl_setopt($ch, CURLOPT_PROXY, "192.168.0.1:3129"); //прокся если надо ....curl_setopt($fh, CURLOPT_TIMEOUT, 10); //таймаут соединения в секундах ....curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //следовать по редиректу ....//curl_setopt($fh, CURLOPT_REFERER, 'http://www.solt.ru/'); //тот самый реферер без которого карты не работают (указывать естественно свой) ....curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //возвращать данные в буфер ....if($headers) //заполнение дополнительных заголовков ........curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //получение данных в буфер ....$buf = curl_exec($ch); ....if($buf=="") //при ошибке возвращать её номер ........$buf = curl_errno($ch); //финиш ....curl_close ( $ch ); ....return $buf; } -----------
Ну и пример вызова данной функции: $info=get_url("http://angelscity.combats.ru/inf.pl?login=Alex+Nomad&short=1");
Для использования функций CURL необходимо установить пакет CURL (http://curl.haxx.se/). Необходимо мспользовать версию CURL 7.0.2-beta или старше, с более младшими версиями PHP не работает. Для PHP 4.2.3 необходимо использовать версию CURL 7.9.0 или старше. Начиная PHP 4.3.0, необходима CURL 7.9.8 или старше. Вероятнее всего, PHP 5.0.0 будет требовать CURL не младше 7.10.5
Для использования CURL необходимо также собрать PHP с опцией --with-curl[=DIR], где DIR - имя директории, содержащей поддиректории lib и include. Директория "include" должна содержать поддиректорию "curl" с файлами easy.h и curl.h. Директория "lib" должна содержать файл libcurl.a. Начиная с PHP 4.3.0 с помощью опции --with-curlwrappers можно сконфигурировать PHP для использования CURL при работе с удаленными файлами.
Ну правильно, в версиях >4.3.0 он почти всегда есть.
Гость БК
11-10-07 @ 11:40
Вчера обкатал curl. Прекрасная вещь: легко формировать POST/GET запросы, легко получать/отправлять куки; плюс комбинировать все вместе. В связке с tidy можно преобразовывать полученные HTML-страницы как угодно.